package snafu.framework.agents;

import java.util.List;
import java.util.Set;

import snafu.framework.actions.AbstractAction;
import snafu.framework.actions.Intention;
import snafu.framework.senses.Sense;
import snafu.framework.states.State;

public interface AgentState extends State {
	
	/**
	 * Get a unique intention.
	 * 
	 * @param clazz
	 *            class specifying the intention
	 * @return intention
	 */
	public <I extends Intention<?>> I getIntention(Class<I> clazz);

	/**
	 * Get all intentions.
	 * 
	 * @return list of intentions
	 */
	public List<Intention<? extends AbstractAction>> getIntentions();
	
	/**
	 * Get all senses the agent has.
	 * 
	 * @return a set of senses
	 */
	public Set<Sense> getSenses();
}
